package com.csi.bumblebee.util;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

/**
 * token工具类
 *
 * @author HUOJT
 */
public class JwtUtil {

    /**
     * 签名秘钥
     */
    private static final String KEY = "bumblebee";

    /**
     * 制作token
     *
     * @param username 用户名
     * @param role     角色
     * @param day      天数
     * @return token字符串
     */
    public static String createToken(String username, String role, double day) {

        // jwt工厂
        JwtBuilder jwtBuilder = Jwts.builder();

        // 返回token值
        return jwtBuilder

                // 设置头部
                .setHeaderParam("typ", "jwt")
                .setHeaderParam("alg", "HS256")

                // 设置负载(登记部分)
                .setExpiration(new Date(System.currentTimeMillis() + getExpTime(day)))
                .setId(UUID.randomUUID().toString())
                .setSubject("jwt-token")

                // 设置负载（公共部分）
                .claim("username", username)
                .claim("role", role)

                // 设置签名
                .signWith(SignatureAlgorithm.HS256, KEY)

                // 转为字符串形式
                .compact();
    }

    /**
     * 解析token
     *
     * @param token token字符串
     * @return token是否合法
     */
    public static boolean parseToken(String token) {
        boolean result = true;
        if (token == null || "".equals(token.trim())) {
            result = false;
        } else {
            try {
                JwtParser jwtParser = Jwts.parser();
                Jws<Claims> claimsJws = jwtParser.setSigningKey(KEY).parseClaimsJws(token);
            } catch (Exception e) {
                e.getStackTrace();
                result = false;
            }
        }
        return result;
    }

    private static long getExpTime(double day) {
        return (long) ((double) day * 60 * 60 * 24 * 1000);
    }

}

